<?php
/*
* Clase Cache
* carlos de oliveira
* cardoel@gmail.com
*/

class cache
{
	var $cache_dir; // path ó ruta donde se almacena la cache
	var $cache_time; // tiempo en que expira la cache (en segundos)
	var $caching = false; //true, para cachear
	var $cleaning = false; //true, para limpiar y actualizar
	var $file = ''; // path o ruta del script a cachear
	
	function __construct() {
		$this->cache_time = 3600;
		$this->cache_dir = CACHEDIR;	
		$this->cleaning = NULL;
	}
	
	function cache() {
		$this->cache_time = 3600;
		$this->cache_dir = CACHEDIR;	
		$this->cleaning = NULL;
	}

	
	function setTime($seconds) {
		$this->cache_time = $seconds;	
	}
	
	function start()	{				
		$this->file = $this->cache_dir."cache_".md5(urlencode($_SERVER['REQUEST_URI'])).".html"; //md5, encriptado por seguridad
		//condicional: Existencia del archivo, fecha expiración, acción
		if (file_exists($this->file) && (
			fileatime($this->file)+$this->cache_time)>time() && 
			$this->cleaning == false)	{
			readfile($this->file);
		/*
		// abrimos el fichero
		$handle = fopen( $this->file , "r");
		do {
		//leemos hasta 8192 bytes por defecto (podemos incrementarlo)
		$data = fread($handle, 8192);
		if (strlen($data) == 0) {
		break;
		}
		//mostramos la cache
		echo $data;
		} while (true);
		fclose($handle);
		*/
			exit();
		} else {
			$this->caching = true;
			//grabamos buffer			
		}
	}
	
	function finish($data){
		if ($this->caching){
		//Recuperamos información del buffer
			echo $data;
			//borramos cache si existe
			if(file_exists($this->file)) unlink($this->file);
		
			//escribimos información en cache
			$fp = fopen( $this->file , 'w' );
			fwrite ( $fp , $data );
			fclose ( $fp );
		}
	}
	
} // Fin clase Cache
?>